package fabrica2.persistencia;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import fabrica2.excecoes.DAOException;
import fabrica2.modelo.Cliente;

public class ClienteDAO extends GenericDAOImpl<Cliente> implements Dao<Cliente> {

	@Override
	public Cliente persistir(Cliente cliente) throws DAOException {
		ResultSet rs = getResultSet("SELECT * FROM Cliente where id_cliente = "
				+ cliente.getIdCliente());
		try {
			// Se existir atualiza
			if (rs.next()) {
				execute("UPDATE Cliente SET " +
						"tipo_documento = '" + cliente.getTipoDocumento() + "' , "
						+ "cod_documento = '" + cliente.getCodDocumento() + "' ," 
						+ "nome = '" + cliente.getNome() + "' , "
						+ "endereco = '" + cliente.getEndereco() + "' , "
						+ "telefone = '" + cliente.getTelefone() + "' , "
						+ "email = '" + cliente.getEmail() + "' "
						+ "WHERE id_cliente = " + cliente.getIdCliente());
			}
			// Ou cria um novo
			else {
				execute("INSERT INTO Cliente (nome, cod_documento, tipo_documento, email, telefone, endereco) VALUES ("
						+ "'" + cliente.getNome() + "' , "
						+ "'" + cliente.getCodDocumento() + "' , "
						+ "'" + cliente.getTipoDocumento() + "' , "
						+ "'" + cliente.getEmail() + "' , "
						+ "'" + cliente.getTelefone() + "' , "
						+ "'" + cliente.getEndereco()
						+ "') ");
				String update = "SELECT * FROM Cliente where cod_documento = '"+cliente.getCodDocumento() + "' AND tipo_documento = '" + cliente.getTipoDocumento()+"'";
				rs = getResultSet(update);
				if (rs.next()) {
						cliente.setIdCliente(rs.getInt("id_cliente"));
				}
			}
		} catch (SQLException e) {
			throw new DAOException();
		}finally{
			desconectar();
		}
		return cliente;

	}

	@Override
	public void remover(Cliente cliente) throws DAOException {
		execute("DELETE FROM Cliente WHERE id_cliente = "
				+ cliente.getIdCliente());
	}

	@Override
	public Cliente getPorId(int id) throws DAOException {
		ResultSet rs = getResultSet("SELECT * FROM Cliente WHERE id_cliente = "
				+ id);
		Cliente cliente = new Cliente();
		try {
			while (rs.next()) {
				cliente.setNome(rs.getString("nome"));
				cliente.setCodDocumento(rs.getString("cod_documento"));
				cliente.setTipoDocumento(rs.getString("tipo_documento"));
				cliente.setEndereco(rs.getString("endereco"));
				cliente.setTelefone(rs.getString("telefone"));
				cliente.setEmail(rs.getString("email"));
				cliente.setIdCliente(rs.getInt("id_cliente"));
			}
		} catch (SQLException se) {
			throw new DAOException();
		}finally{
			desconectar();
		}
		return cliente;
	}

	@Override
	public List<Cliente> listar() throws DAOException {
		ResultSet rs = getResultSet("SELECT FROM Cliente");
		List<Cliente> clientes = new ArrayList<Cliente>();
		Cliente cliente;
		try {
			while (rs.next()) {
				cliente = new Cliente();
				cliente.setNome(rs.getString("nome"));
				cliente.setCodDocumento(rs.getString("cod_documento"));
				cliente.setTipoDocumento(rs.getString("tipo_documento"));
				cliente.setEndereco(rs.getString("endereco"));
				cliente.setTelefone(rs.getString("telefone"));
				cliente.setEmail(rs.getString("email"));
				cliente.setIdCliente(rs.getInt("id_cliente"));
				clientes.add(cliente);
			}
		} catch (SQLException se) {
			throw new DAOException();
		}finally{
			desconectar();
		}
		return clientes;
	}

	@Override
	public void removerPorId(int id) throws DAOException {
		execute("DELETE FROM Cliente WHERE id_cliente = " + id);

	}

	public List<Cliente> getClientesPorNome(String nome) throws DAOException {
		ResultSet rs = getResultSet("SELECT FROM Cliente WHERE nome LIKE '%"
				+ nome + "%'");
		List<Cliente> clientes = new ArrayList<Cliente>();
		Cliente cliente;
		try {
			while (rs.next()) {
				cliente = new Cliente();
				cliente.setNome(rs.getString("nome"));
				cliente.setCodDocumento(rs.getString("cod_documento"));
				cliente.setTipoDocumento(rs.getString("tipo_documento"));
				cliente.setEndereco(rs.getString("endereco"));
				cliente.setTelefone(rs.getString("telefone"));
				cliente.setEmail(rs.getString("email"));
				cliente.setIdCliente(rs.getInt("id_cliente"));
				clientes.add(cliente);
			}
		} catch (SQLException se) {
			throw new DAOException();
		}finally{
			desconectar();
		}
		return clientes;
	}

}
